/**
 * 该方法实现基于jquery
 */
const Request = function () { }
Request.prototype = {
  /**
   * post请求
   * @param {String} url api接口
   * @param {Object} params 参数
   */
  post: function (url, params, config) {
    return this.createAjax('POST', url, params, config)
  },
  /**
   * get请求
   * @param {String} url api接口
   * @param {Object} params 参数
   */
  get: function (url, params, config) {
    return this.createAjax('GET', url, params, config)
  },
  /**
   * 对象转url str
   * 只支持一级obj
  */
  obj2Str(obj) {
    let str = ''
    for (let key in obj) {
      if (key && obj.hasOwnProperty(key)) {
        let val = obj[key]
        if (this.checkChinese(val)) {
          val = encodeURIComponent(val)
        }
        str += '&' + key + '=' + val
      }
    }
    str = '?' + str.substr(1)
    return str
  },
  /**
   * ajax 方法封装
   * @param {String} methods 请求方法类型
   * @param {String} url api地址接口
   * @param {Object} params 请求参数
   */
  createAjax: function (methods, url, params, config) {
    let link = ''
    if (url.indexOf('http://') > -1 || url.indexOf('https://') > -1) {
      link = url
    } else {
      link = $constant.HOST_API + url
    }
    // debugger
    return new Promise((resolve, reject) => {
      config = config || {}
      const conf = {
        contentType: 'application/x-www-form-urlencoded',
        cache: false
      }
      for (let key in conf) {
        if (key && config.hasOwnProperty(key)) {
          conf[key] = config[key]
        }
      }

      jq.ajax({
        type: methods,
        url: link,
        timeout: $constant.requestTimeout, // 超时时间设置，单位毫秒
        cache: conf.cache, // 是否缓存
        contentType: conf.contentType,
        beforeSend: function (XMLHttpRequest) {
          // XMLHttpRequest.setRequestHeader('Authorization', token);
        },
        // async: false,
        // contentType: false, //必须false才会避开jQuery对 formdata 的默认处理 XMLHttpRequest会对 formdata 进行正确的处理  
        // processData: false, //必须false才会自动加上正确的Content-Type
        dataType: 'json',
        crossDomain: true,
        data: params,
        success: function (res) {
          // code=200 成功，-1=失败;message=提示消息
          // status=100 成功 第三方接口
          // debugger
          if (res.code === 200) {
            // debugger
            if (res.isList) {
              res.data = res.data || []
            } else {
              res.data = res.data || {}
            }
            resolve(res)
          } else if (res.status === 100) {
            resolve(res)
          } else {
            $mui.toast(res.message || '系统异常，请联系管理员', { duration: 3000 })
            reject(res)
          }
        },
        error: function (err) {
          // debugger
          $mui.toast('系统异常，请联系管理员')
          reject(err)
        }
      })
    })
  },
  /**
   * ajax file 上传 方法封装
   * @param {String} methods 请求方法类型
   * @param {String} url api地址接口
   * @param {Object} params 请求参数
   */
  uploadFile(methods, url, params) {
    return new Promise((resolve, reject) => {
      jq.ajax({
        type: methods,
        url: $constant.HOST_API + url,
        timeout: $constant.requestTimeout, // 超时时间设置，单位毫秒
        cache: false,
        // contentType: 'application/json',
        beforeSend: function (XMLHttpRequest) {
          // XMLHttpRequest.setRequestHeader('Authorization', token);
        },
        // async: false,
        contentType: false, //必须false才会避开jQuery对 formdata 的默认处理 XMLHttpRequest会对 formdata 进行正确的处理  
        processData: false, //必须false才会自动加上正确的Content-Type
        dataType: 'json',
        crossDomain: true,
        data: params,
        success: function (res) {
          // code=200 成功，-1=失败;message=提示消息
          // debugger
          if (res.code === 200) {
            // debugger
            if (res.isList) {
              res.data = res.data || []
            } else {
              res.data = res.data || {}
            }
            resolve(res)
          } else {
            $mui.toast(res.message || '系统异常，请联系管理员', { duration: 3000 })
            reject(res)
          }
        },
        error: function (err) {
          // debugger
          $mui.toast('系统异常，请联系管理员')
          reject(err)
        }
      })

    })
  }
}

export const $request = new Request()
window.$request = $request;